/**
 * 表格工具类
 */
export class TableUtils {
  /**
   * 获取表格中指定列名的索引位置
   * @param columnNames 要查找的列名或列名数组
   * @param tableSelector 表格选择器，默认为 'table'
   * @returns 列索引数组（从0开始）
   */
  static getColumnIndexes(columnNames: string[] | string, tableSelector: string = 'table'): number[] {
    const targetColumns = Array.isArray(columnNames) ? columnNames : [columnNames]
    const columnIndexes: number[] = []

    $(`${tableSelector} tr:first th`).each((index, th) => {
      const columnText = $(th).text().trim()
      if (targetColumns.includes(columnText)) {
        columnIndexes.push(index)
      }
    })

    return columnIndexes
  }

  /**
   * 对表格中指定列名的列添加指定的类名
   * @param columnNames 列名或列名数组
   * @param className 要添加的类名
   * @param tableSelector 表格选择器，默认为 'table'
   */
  static addClassToTableColumn(columnNames: string[] | string, className: string, tableSelector: string = 'table'): void {
    // 获取列索引
    const columnIndexes = this.getColumnIndexes(
      Array.isArray(columnNames) ? columnNames : [columnNames],
      tableSelector,
    )

    // 如果没有找到匹配的列
    if (columnIndexes.length === 0) {
      return
    }

    // 为指定列的所有单元格添加类名
    $(`${tableSelector} tr`).each(function () {
      const $cells = $(this).children('td, th')
      columnIndexes.forEach((columnIndex) => {
        if (columnIndex < $cells.length) {
          $cells.eq(columnIndex).addClass(className)
        }
      })
    })
  }
}
